package chapter07

/**
 * 普通的WordCount
 */
object Test17_CommonWordCount {

  def main(args: Array[String]): Unit = {

    val strings: List[String] = List(
      "hello",
      "hello word",
      "hello scala",
      "hello spark form scala",
      "hello flink from scala"
    )

    //1、对字符传进行切分、得到一个打散所有单词的列表---- 将每一个字符串转换成一个一个单词
    val wordList1: List[Array[String]] = strings.map(_.split(" "))
    val wordList2: List[String] = wordList1.flatten
    println(wordList2)

    //2、相同的单词进行分组-----将相同的单词放置在一起
    val groupMap: Map[String, List[String]] = wordList2.groupBy(word => word)
    println(groupMap)

    //3、对分组之后的LIST取长度、得到每个单词个数 ----对相同的单词进行计数
    val countMap: Map[String, Int] = groupMap.map(kv => (kv._1, kv._2.length))
    println("....countMap: " + countMap)

    //4、将Map转换为list、并排序取前三
    val sortList: List[(String, Int)] = countMap.toList

      //第一个取 _._2 意思取第二个元素COUNT值、做一个降序的排列 ---对计数完成后的结果进行排序（降序）
      .sortWith(_._2 > _._2)
    println(sortList)

  }

}
